import io.swagger.models.auth.In;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

/**
 * 统计一个文本文件中每个中文字符出现的次数，并且排序从大到小输出？
 */

public class T {
    public static void main(String[] args){
//        //读取磁盘中的文件
        try (
            FileInputStream fis = new FileInputStream("考试文件.txt");
            ){
            byte[] data = new byte[fis.available()];
            fis.read(data);
            String line = new String(data, StandardCharsets.UTF_8);
            Map<Character,Integer> map = new HashMap<>();

            for (int i = 0; i < line.length(); i++) {
                if(map.containsKey(line.charAt(i))){ //如果该剑存在,则把值加1
                    map.put(line.charAt(i),map.get(line.charAt(i))+1);
                }else{
                    map.put(line.charAt(i),1);      //否则不存在,把该字符作为键值存入,并赋值为1
                }
            }
            //1：把map转换成entryset，再转换成保存Entry对象的list。
            List<Map.Entry<Character,Integer>> entryList = new ArrayList<>(map.entrySet());
            //2：调用Collections.sort(list,comparator)方法把Entry-list排序
            Comparator<Map.Entry<Character,Integer>> com = new Comparator<Map.Entry<Character,Integer>>() {
                @Override
                public int compare(Map.Entry o2, Map.Entry o1) {
                    return ((Integer)o1.getValue()).compareTo((Integer)o2.getValue());
                }
            };
            Collections.sort(entryList,com);
            for(Map.Entry<Character,Integer> e:entryList){
                Character key = e.getKey();
                Integer value = e.getValue();
                System.out.println(key+":"+value);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }



    }
}
